package top.ytazwc.principle.liskov.improve;

/**
 * @author 花木凋零成兰
 * @title Liskov
 * @date 2024/4/16 20:07
 * @package top.ytazwc.principle.liskov.improve
 * @description TODO
 */
public class Liskov {
    public static void main(String[] args) {
        A a = new A();
        System.out.println("11-3=" + a.func1(11, 3));
        System.out.println("1-8=" + a.func1(1, 8));
        System.out.println("-------------------------");
        B b = new B();
        // 因为B类不再继承A类 因此调用者 不会再func1是求减法
        // 调用完成的功能就会很明确
        System.out.println("11+3=" + b.func1(11, 3));   //这里本意是求出 11+3
        System.out.println("1+8=" + b.func1(1, 8));     // 1+8
        System.out.println("11+3+9=" + b.func2(11, 3));

        // 使用组合仍然可以使用到A类的方法
        System.out.println("11-3=" + b.func3(11, 3));   // 11-3
    }
}
// 创建一个更加基础的基类
class Base {
    // 把更加基础的方法和成员写到Base类
}
// A类
class A extends Base {
    // 返回两个数的差
    public int func1(int nums1, int nums2) {
        return nums1 - nums2;
    }
}
// B类继承了A
// 新增了一个方法func2, 即求 func1的值 与 9 的和
class B extends Base {

    // 如果B需要使用A类的方法 可以使用组合关系
    private A a = new A();
    // 我们仍然想使用A的方法
    public int func3(int a, int b) {
        return this.a.func1(a, b);
    }
    public int func1(int nums1, int nums2) {
        return nums1 + nums2;
    }
    public int func2(int nums1, int nums2) {
        return func1(nums1, nums2) + 9;
    }
}
